package com.xteam.xnetworkdisk.scheduled;

import com.xteam.xnetworkdisk.utils.OssUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

//@Component
public class LinkUpdateScheduler {

//    @Autowired
    private OssUtil ossUtil;
    /**
     * 每天更新99天前的文件链接
     */
//    @Scheduled(cron = "0 0 0 * * ?") // 每天午夜12点执行
    public void updateFileLinks() {
        // 计算99天前的日期
        Date targetDate = getDateDaysAgo(99);
        String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(targetDate);

        // 获取该日期的文件名列表
        List<String> fileNames = getFileNamesByDate(dateStr);

        for (String fileName : fileNames) {
            String newUrl = ossUtil.getNewPresignedUrl(fileName);
            if (newUrl != null) {
                // 处理新链接，例如更新数据库或通知用户
                updateFileLinkInDatabase(fileName, newUrl);
            }
        }
    }

    /**
     * 获取从今天起向前推指定天数的日期
     *
     * @param days 向前推的天数
     * @return 日期对象
     */
    private Date getDateDaysAgo(int days) {
        return new Date(System.currentTimeMillis() - (long) days * 24 * 60 * 60 * 1000);
    }

    /**
     * 获取指定日期的文件名列表
     *
     * @param dateStr 日期字符串（格式：yyyy-MM-dd）
     * @return 文件名列表
     */
    private List<String> getFileNamesByDate(String dateStr) {
        // 实现获取文件名的逻辑
        // 例如从数据库中获取该日期的文件名
        return List.of(); // 返回空列表，实际应用中需要替换为具体实现
    }

    /**
     * 更新数据库中的文件链接
     *
     * @param fileName 文件名
     * @param newUrl   新的链接
     */
    private void updateFileLinkInDatabase(String fileName, String newUrl) {
        // 实现更新数据库链接的逻辑
        // 例如调用一个服务或 DAO 来更新文件链接
    }
}
